package interfaces;

/**
 * Interface for wrapping cups
 * @author Don
 *
 */
public interface ICup {

	/**
	 * Adds a cup listener to this cup, if it isn't already listening
	 * @param listener
	 * 		the listener to be alerted to any cup events
	 */
	public void addCupListener(ICupListener listener);
	
	/**
	 * Removes an existing cup listener, if it is in the set
	 * @param listener
	 * 		The listener for this cup
	 */
	public void removeCupListener(ICupListener listener);
	
	/**
	 * Changes the state of a light
	 * @param flags
	 * 		The flags representing the requested light state
	 * @return
	 * 		true if the command is likely to succeed
	 */
	public boolean changeLightState(int flags);
	
	/**
	 * Gets the state of the light in this cup
	 * @return
	 * 		flags representing the state of the light
	 */
	public int getLightState();
}
